﻿using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using LinkedList;

namespace UnitTestLinkedList
{
    [TestClass]
    public class UnitTest1LinkedList
    {
        [TestMethod]
        public void TestMethodEmpty()
        {
            LinkedList<int> lli = new LinkedList<int>();
            Assert.AreEqual(true, lli.isEmpty());
        }

        [TestMethod]
        public void TestMethodCount()
        {
            LinkedList<int> lli = new LinkedList<int>();
            lli.AddFirst(20);
            lli.AddFirst(30);
            lli.AddLast(40);
            lli.AddLast(50);
            lli.AddLast(100);
            Assert.AreEqual(5, lli.CountNodes());
        }

        [TestMethod]
        public void TestMethodAddFirst()
        {
            LinkedList<int> lli = new LinkedList<int>();
            lli.AddFirst(20);
            Assert.AreEqual(20, lli.First());
            lli.AddFirst(30);
            Assert.AreEqual(30, lli.First());
            Assert.AreEqual(20, lli.Last());

        }

        [TestMethod]
        public void TestMethodAddLast()
        {
            LinkedList<int> lli = new LinkedList<int>();
            lli.AddLast(20);
            Assert.AreEqual(20, lli.First());
            lli.AddLast(30);
            Assert.AreEqual(20, lli.First());
            Assert.AreEqual(30, lli.Last());

        }

        [TestMethod]
        public void TestMethodClear()
        {
            LinkedList<int> lli = new LinkedList<int>();
            lli.AddFirst(20);
            lli.AddFirst(30);
            lli.Clear();
            Assert.AreEqual(true, lli.isEmpty());
        }

        [TestMethod]
        public void TestMethodContains()
        {
            LinkedList<int> lli = new LinkedList<int>();
            lli.AddFirst(20);
            lli.AddFirst(30);
            Assert.AreEqual(true, lli.Contains(20));
        }

        [TestMethod]
        public void TestMethodFind()
        {
            LinkedList<int> lli = new LinkedList<int>();
            lli.AddFirst(20);
            lli.AddFirst(30);
            Assert.AreEqual(30, lli.Find(30));
            Assert.AreEqual(20, lli.Find(20));
        }

        [TestMethod]
        public void TestMethodRemove()
        {
            LinkedList<int> lli = new LinkedList<int>();
            lli.AddFirst(20);
            lli.AddFirst(30);
            lli.AddLast(40);
            lli.AddLast(50);
            lli.AddLast(100);
            Assert.AreEqual(true, lli.Remove(30));
            Assert.AreEqual(false, lli.Contains(30));
            Assert.AreEqual(true, lli.Remove(40));
            Assert.AreEqual(false, lli.Contains(40));
            Assert.AreEqual(true, lli.Remove(100));
            Assert.AreEqual(false, lli.Contains(100));
        }

        [TestMethod]
        public void TestMethodRemoveFirst()
        {
            LinkedList<int> lli = new LinkedList<int>();
            lli.AddFirst(20);
            lli.AddFirst(30);
            lli.AddLast(40);
            lli.AddLast(50);
            lli.AddLast(100);
            lli.RemoveFirst();
            Assert.AreEqual(20, lli.First());
        }

        [TestMethod]
        public void TestMethodRemoveLast()
        {
            LinkedList<int> lli = new LinkedList<int>();
            lli.AddFirst(20);
            lli.AddFirst(30);
            lli.AddLast(40);
            lli.AddLast(50);
            lli.AddLast(100);
            lli.RemoveLast();
            Assert.AreEqual(50, lli.Last());
        }

    }
}
